<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function Star(uname, age) {
            this.uname = uname
            this.age = age
            // this.sing = function () {
            //     console.log('唱歌');
            // }

        }
        Star.prototype.sing = function () {
            console.log('唱歌');
        }
        var ldh = new Star('刘德华', 18)
        var zxy = new Star('张学友', 20)
        ldh.sing()
        console.log(ldh);//对象身上系统自己添加一个__porto__ 指向我们构造函数的原型对象prototype
        // 对象原型__proto__和原型对象prototype是等价的
        console.log(ldh.__proto__=== Star.prototype);//true
        // 方法的查找规则：
        // 首先先看ldh 对象身上有没有sing方法 如果有就执行这个对象上的sing
        // 如果没有sing 这个方法 因为有__proto__的存在 就去我们构造函数原型对象prototype身上查找sing这个方法

        // 为什么我们的对象可以访问构造函数原型对象里面的方法呢？
        // 每一个对象里面都会有一个属性 叫做__proto__ 他也叫做原型（对象原型）
        // 这个原型指向的是我们构造函数的原型对象 所以当我们对象在使用某一个方法时候 先看一看你这个对象本身有没有这个方法 如果没有 不要紧 我们对象有个__proto__它指向的是我们原型对象 所以我们在去原型对象里看看有没有这个方法 有这个方法就可以直接拿过来使用了。
//   __proto__为对象的查找提供一个方向 或者说一条线路 但它是一个非标准 实际开发中不可以使用这个属性 只是内部指向原型对象prototype
    </script>
</body>

</html>